use regex::Regex;
use std::io::{self, BufRead, BufReader};
use std::process::{Command, Stdio};

fn main() -> io::Result<()> {
    // 定义ffmpeg命令，参数可以根据你的需要来更改
    let mut ffmpeg_cmd = Command::new("C:\\ffmpeg\\bin\\ffmpeg.exe")
        .arg("-loglevel")
        .arg("debug") // 这里设置一个较低的日志级别，输出所有详细信息
        .arg("-i") // 输入文件参数
        .arg("C:\\Users\\david\\mycode\\rust\\test1\\aa.mkv") // 替换为你的视频文件路径
        .arg("-c:v") // 视频编解码器
        .arg("libx264") // 输出格式
        .arg("C:\\Users\\david\\mycode\\rust\\test1\\test.mkv") // 输出文件
        .stderr(Stdio::piped()) // 处理stderr用于进度信息
        .stdout(Stdio::piped()) // 你可以选择捕获stdout
        .spawn()?; // 启动ffmpeg进程

    // 获取ffmpeg进程的stderr
    let stderr = ffmpeg_cmd.stderr.as_mut().unwrap();
    let reader = BufReader::new(stderr);

    // 用于匹配包含"frame="的行
    let frame_re = Regex::new(r"frame=\s*\d+").unwrap();

    // 读取stderr的每一行，分析进度信息
    for line in reader.lines() {
        let line = line?;
        if frame_re.is_match(&line) {
            println!("line====={}", line);  // 只打印包含"frame="的行
        }
    }

    // 等待ffmpeg进程执行完毕
    let _ = ffmpeg_cmd.wait()?;

    Ok(())
}
